<style>
    .main-body {
        top: 50%;
        left: 50%;
        position: absolute;
        -webkit-transform: translate(-50%, -50%);
        -moz-transform: translate(-50%, -50%);
        -ms-transform: translate(-50%, -50%);
        -o-transform: translate(-50%, -50%);
        transform: translate(-50%, -50%);
        /* overflow: hidden; */
        box-shadow: 0 0 10px rgba(0, 0, 0, .2);
    }

    .login-main .login-bottom .center .item input {
        display: inline-block;
        width: 227px;
        height: 22px;
        padding: 0;
        position: absolute;
        border: 0;
        outline: 0;
        font-size: 14px;
        letter-spacing: 0;
    }

    .login-main .login-bottom .center .item .icon-1 {
        background: url(/src/images/icon-login.png) no-repeat 1px 0;
    }

    .login-main .login-bottom .center .item .icon-2 {
        background: url(/src/images/icon-login.png) no-repeat -54px 0;
    }

    .login-main .login-bottom .center .item .icon-3 {
        background: url(/src/images/icon-login.png) no-repeat -106px 0;
    }

    .login-main .login-bottom .center .item .icon-4 {
        background: url(/src/images/icon-login.png) no-repeat 0 -43px;
        position: absolute;
        right: -10px;
        cursor: pointer;
    }

    .login-main .login-bottom .center .item .icon-5 {
        background: url(/src/images/icon-login.png) no-repeat -55px -43px;
    }

    .login-main .login-bottom .center .item .icon-6 {
        background: url(/src/images/icon-login.png) no-repeat 0 -93px;
        position: absolute;
        right: -10px;
        margin-top: 8px;
        cursor: pointer;
    }

    .login-main .login-bottom .tip .icon-nocheck {
        display: inline-block;
        width: 10px;
        height: 10px;
        border-radius: 2px;
        border: solid 1px #9abcda;
        position: relative;
        top: 2px;
        margin: 1px 8px 1px 1px;
        cursor: pointer;
    }

    .login-main .login-bottom .tip .icon-check {
        margin: 0 7px 0 0;
        width: 14px;
        height: 14px;
        border: none;
        background: url(/src/images/icon-login.png) no-repeat -111px -48px;
    }

    .login-main .login-bottom .center .item .icon {
        display: inline-block;
        width: 33px;
        height: 22px;
    }

    .login-main .login-bottom .center .item {
        width: 288px;
        height: 35px;
        border-bottom: 1px solid #dae1e6;
        margin-bottom: 35px;
    }

    .login-main {
        width: 428px;
        position: relative;
        float: left;
    }

    .login-main .login-top {
        height: 117px;
        background-color: #148be4;
        border-radius: 12px 12px 0 0;
        font-family: SourceHanSansCN-Regular;
        font-size: 30px;
        font-weight: 400;
        font-stretch: normal;
        letter-spacing: 0;
        color: #fff;
        line-height: 117px;
        text-align: center;
        overflow: hidden;
        -webkit-transform: rotate(0);
        -moz-transform: rotate(0);
        -ms-transform: rotate(0);
        -o-transform: rotate(0);
        transform: rotate(0);
    }

    .login-main .login-top .bg1 {
        display: inline-block;
        width: 74px;
        height: 74px;
        background: #fff;
        opacity: .1;
        border-radius: 0 74px 0 0;
        position: absolute;
        left: 0;
        top: 43px;
    }

    .login-main .login-top .bg2 {
        display: inline-block;
        width: 94px;
        height: 94px;
        background: #fff;
        opacity: .1;
        border-radius: 50%;
        position: absolute;
        right: -16px;
        top: -16px;
    }

    .login-main .login-bottom {
        width: 428px;
        background: #fff;
        border-radius: 0 0 12px 12px;
        padding-bottom: 53px;
    }

    .login-main .login-bottom .center {
        width: 288px;
        margin: 0 auto;
        padding-top: 40px;
        padding-bottom: 15px;
        position: relative;
    }

    .login-main .login-bottom .tip {
        clear: both;
        height: 16px;
        line-height: 16px;
        width: 288px;
        margin: 0 auto;
    }

    body {
        background: #0160e5 url(/src/images/selectBody.png) no-repeat;
        position: static;
        font-size: 12px;
        overflow: hidden;
    }

    input::-webkit-input-placeholder {
        color: #a6aebf;
    }

    input::-moz-placeholder {
        /* Mozilla Firefox 19+ */
        color: #a6aebf;
    }

    input:-moz-placeholder {
        /* Mozilla Firefox 4 to 18 */
        color: #a6aebf;
    }

    input:-ms-input-placeholder {
        /* Internet Explorer 10-11 */
        color: #a6aebf;
    }

    input:-webkit-autofill {
        /* 取消Chrome记住密码的背景颜色 */
        box-shadow: 0 0 0 1000px white inset !important;
        -webkit-box-shadow: 0 0 0 1000px white inset !important;
    }

    html {
        height: 100%;
    }

    .login-main .login-bottom .tip {
        clear: both;
        height: 16px;
        line-height: 16px;
        width: 288px;
        margin: 0 auto;
    }

    .login-main .login-bottom .tip .login-tip {
        font-family: MicrosoftYaHei;
        font-size: 12px;
        font-weight: 400;
        font-stretch: normal;
        letter-spacing: 0;
        color: #9abcda;
        cursor: pointer;
    }

    .login-main .login-bottom .tip .forget-password {
        font-stretch: normal;
        letter-spacing: 0;
        color: #1391ff;
        text-decoration: none;
        position: absolute;
        right: 62px;
    }

    .login-main .login-bottom .login-btn {
        width: 288px;
        height: 40px;
        background-color: #1E9FFF;
        border-radius: 16px;
        text-align: center;
        line-height: 40px;
        color: #fff;
        font-size: 14px;
        letter-spacing: 0;
        cursor: pointer;
        border: none;
    }

    .login-main .login-bottom .center .item .validateImg {
        position: absolute;
        right: 1px;
        cursor: pointer;
        height: 36px;
        border: 1px solid #e6e6e6;
    }

    .footer {
        left: 0;
        bottom: 0;
        color: #fff;
        width: 100%;
        position: absolute;
        text-align: center;
        line-height: 30px;
        padding-bottom: 10px;
        text-shadow: #000 0.1em 0.1em 0.1em;
        font-size: 14px;
    }

    .padding-5 {
        padding: 5px !important;
    }

    .footer a,
    .footer span {
        color: #fff;
    }

    @media screen and (max-width:428px) {
        .login-main {
            width: 360px !important;
        }

        .login-main .login-top {
            width: 360px !important;
        }

        .login-main .login-bottom {
            width: 360px !important;
        }
    }
</style>
<div class="main-body">
    <div class="login-main">
        <div class="login-top">
            <span>欢迎登录</span>
            <span class="bg1"></span>
            <span class="bg2"></span>
        </div>
        <form class="layui-form login-bottom">
            <div class="center">
                <div class="item">
                    <span class="icon icon-2"></span>
                    <input type="text" name="username" lay-verify="required" placeholder="请输入登录账号" maxlength="24" />
                </div>

                <div class="item">
                    <span class="icon icon-3"></span>
                    <input type="password" name="password" lay-verify="required" placeholder="请输入密码" maxlength="20">
                    <span class="bind-password icon icon-4"></span>
                </div>

                <div id="validatePanel" class="item" style="width: 137px;">
                    <input type="text" name="captcha" placeholder="请输入验证码" maxlength="4">
                    <img id="refreshCaptcha" class="validateImg" src="/src/images/captcha.jpg">
                </div>

            </div>
            <div class="layui-form-item" style="text-align:center; width:100%;height:100%;margin:0px;">
                <button class="login-btn" lay-submit="" lay-filter="login">立即登录</button>
            </div>
        </form>
    </div>
</div>
<script>
    layui.config({
        base: '/src/lib/extend/' // 配置 Layui 第三方扩展模块存放的基础目录
    }).extend({
        THREE: 'three.min'
    }).use(['form', 'jquery', 'THREE'], function () {
        var $ = layui.$
            , setter = layui.setter
            , THREE = layui.THREE
            , admin = layui.admin
            , form = layui.form
            , router = layui.router()
            , search = router.search;



        var SEPARATION = 90, AMOUNTX = 60, AMOUNTY = 40;
        var container;
        var camera, scene, renderer;
        var particles, particle, count = 0;
        var mouseX = 0, mouseY = 0;
        var windowHalfX = window.innerWidth / 2;
        var windowHalfY = window.innerHeight / 2;
        $(function () {
            init();		//初始化
            animate();	//动画效果
        });
        //初始化
        function init() {
            container = document.createElement('div');	//创建容器
            document.getElementById('LAY_app').appendChild(container);			//将容器添加到页面上
            container.className = 'animateXT'
            camera = new THREE.PerspectiveCamera(120, window.innerWidth / window.innerHeight, 1, 1500);		//创建透视相机设置相机角度大小等
            camera.position.set(0, 450, 2000);		//设置相机位置

            scene = new THREE.Scene();			//创建场景
            particles = new Array();

            var PI2 = Math.PI * 2;
            //设置粒子的大小，颜色位置等
            var material = new THREE.ParticleCanvasMaterial({
                color: 0x0f96ff,
                vertexColors: true,
                size: 4,
                program: function (context) {
                    context.beginPath();
                    context.arc(0, 0, 0.01, 0, PI2, true);	//画一个圆形。此处可修改大小。
                    context.fill();
                }
            });
            //设置长条粒子的大小颜色长度等
            var materialY = new THREE.ParticleCanvasMaterial({
                color: 0xffffff,
                vertexColors: true,
                size: 1,
                program: function (context) {

                    context.beginPath();
                    //绘制渐变色的矩形
                    var lGrd = context.createLinearGradient(-0.008, 0.25, 0.016, -0.25);
                    lGrd.addColorStop(0, '#16eff7');
                    lGrd.addColorStop(1, '#0090ff');
                    context.fillStyle = lGrd;
                    context.fillRect(-0.008, 0.25, 0.016, -0.25);  //注意此处的坐标大小
                    //绘制底部和顶部圆圈
                    context.fillStyle = "#0090ff";
                    context.arc(0, 0, 0.008, 0, PI2, true);    //绘制底部圆圈
                    context.fillStyle = "#16eff7";
                    context.arc(0, 0.25, 0.008, 0, PI2, true);    //绘制顶部圆圈
                    context.fill();
                    context.closePath();
                    //绘制顶部渐变色光圈
                    var rGrd = context.createRadialGradient(0, 0.25, 0, 0, 0.25, 0.025);
                    rGrd.addColorStop(0, 'transparent');
                    rGrd.addColorStop(1, '#16eff7');
                    context.fillStyle = rGrd;
                    context.arc(0, 0.25, 0.025, 0, PI2, true);    //绘制一个圆圈
                    context.fill();

                }
            });

            //循环判断创建随机数选择创建粒子或者粒子条
            var i = 0;
            for (var ix = 0; ix < AMOUNTX; ix++) {
                for (var iy = 0; iy < AMOUNTY; iy++) {
                    var num = Math.random() - 0.1;
                    if (num > 0) {
                        particle = particles[i++] = new THREE.Particle(material);
                    }
                    else {
                        particle = particles[i++] = new THREE.Particle(materialY);
                    }
                    //particle = particles[ i ++ ] = new THREE.Particle( material );
                    particle.position.x = ix * SEPARATION - ((AMOUNTX * SEPARATION) / 2);
                    particle.position.z = iy * SEPARATION - ((AMOUNTY * SEPARATION) / 2);
                    scene.add(particle);
                }
            }

            renderer = new THREE.CanvasRenderer();
            renderer.setSize(window.innerWidth, window.innerHeight);
            container.appendChild(renderer.domElement);
            //document.addEventListener( 'mousemove', onDocumentMouseMove, false );
            //document.addEventListener( 'touchstart', onDocumentTouchStart, false );
            //document.addEventListener( 'touchmove', onDocumentTouchMove, false );
            window.addEventListener('resize', onWindowResize, false);
        }

        //浏览器大小改变时重新渲染
        function onWindowResize() {
            windowHalfX = window.innerWidth / 2;
            windowHalfY = window.innerHeight / 2;
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }

        function animate() {
            requestAnimationFrame(animate);
            render();
        }

        //将相机和场景渲染到页面上
        function render() {
            var i = 0;
            //更新粒子的位置和大小
            for (var ix = 0; ix < AMOUNTX; ix++) {
                for (var iy = 0; iy < AMOUNTY; iy++) {
                    particle = particles[i++];
                    //更新粒子位置
                    particle.position.y = (Math.sin((ix + count) * 0.3) * 50) + (Math.sin((iy + count) * 0.5) * 50);
                    //更新粒子大小
                    particle.scale.x = particle.scale.y = particle.scale.z = ((Math.sin((ix + count) * 0.3) + 1) * 4 + (Math.sin((iy + count) * 0.5) + 1) * 4) * 50;	//正常情况下再放大100倍*1200
                }
            }

            renderer.render(scene, camera);
            count += 0.1;
        }



        // 登录过期的时候，跳出ifram框架
        if (top.location != self.location) top.location = self.location;

        $('.bind-password').on('click', function () {
            if ($(this).hasClass('icon-5')) {
                $(this).removeClass('icon-5');
                $("input[name='password']").attr('type', 'password');
            } else {
                $(this).addClass('icon-5');
                $("input[name='password']").attr('type', 'text');
            }
        });

        $('.icon-nocheck').on('click', function () {
            if ($(this).hasClass('icon-check')) {
                $(this).removeClass('icon-check');
            } else {
                $(this).addClass('icon-check');
            }
        });

        // 进行登录操作
        form.on('submit(login)', function (data) {
            data = data.field;
            if (data.username == '') {
                layer.msg('用户名不能为空');
                return false;
            }
            if (data.password == '') {
                layer.msg('密码不能为空');
                return false;
            }
            if (data.captcha == '') {
                layer.msg('验证码不能为空');
                return false;
            }
            // 实际应为请求登陆接口（这里是成功回调）
            var res = {
                "code": 0
                , "msg": "登入成功"
                , "data": {
                    "access_token": "c262e61cd13ad99fc650e6908c7e5e65b63d2f32185ecfed6b801ee3fbdd5c0a"
                }
            }
            layui.data(setter.tableName, {
                key: setter.request.tokenName
                , value: res.data.access_token || '用户信息'
            });
            //登入成功的提示与跳转
            layer.msg('登入成功', {
                offset: '15px'
                , icon: 1
                , time: 1000
            }, function () {
                location.hash = '/';
            });
            return false;
        });
    });
</script>